#include <stdio.h>

// 用第一个元素 将待排序序列 划分成左右两个部分
int Partition(int a[], int low, int high)
{
    int pivot = a[low]; // 第一个元素作为枢轴
    while (low < high)
    {
        while (low < high && a[high] >= pivot)
        {
            --high;
        }
        a[low] = a[high]; // 比枢轴小的元素移动到左端
        while (low < high && a[low] <= pivot)
        {
            ++low;
        }
        a[high] = a[low]; // 比枢轴大的元素移动到右端
    }
    a[low] = pivot; // 枢轴元素存放到最终为止
    return low;     // 返回存放枢轴的最终位置
}
// 快速排序
void QuickSort(int a[], int low, int high)
{
    if (low < high) // low大于等于high就不执行递归划分
    {
        int pivotpos = Partition(a, low, high); // 划分
        QuickSort(a, low, pivotpos - 1);        // 划分左子表
        QuickSort(a, pivotpos + 1, high);       // 划分右子表
    }
}

int main()
{
    int a[] = {100, 12, 54, 68, 1, 3, 5, 59};
    int len = sizeof(a) / sizeof(int);

    QuickSort(a, 0, len - 1);
    for (int i = 0; i < len; i++)
    {
        printf("%d ", a[i]); // 使用空格分隔数字
    }
    return 0;
}